#/*
#-----------------------------------------------------------------------------
#Filename:    CMakeLists.txt
#-----------------------------------------------------------------------------
#
#This source file is part of the
#   ___                 __    __ _ _    _ 
#  /___\__ _ _ __ ___  / / /\ \ (_) | _(_)
# //  // _` | '__/ _ \ \ \/  \/ / | |/ / |
#/ \_// (_| | | |  __/  \  /\  /| |   <| |
#\___/ \__, |_|  \___|   \/  \/ |_|_|\_\_|
#      |___/                              
#      Tutorial Framework
#      http://www.ogre3d.org/tikiwiki/
#-----------------------------------------------------------------------------
#*/
cmake_minimum_required(VERSION 2.6)
 
project(Server)
 
if(WIN32)
	set(CMAKE_MODULE_PATH "$ENV{OGRE_HOME}/CMake/;${CMAKE_MODULE_PATH}")
	set(OGRE_SAMPLES_INCLUDEPATH
		$ENV{OGRE_HOME}/Samples/include
	)
endif(WIN32)
 
if(UNIX)
	set(CMAKE_MODULE_PATH "/usr/local/lib/OGRE/cmake/;${CMAKE_MODULE_PATH}")
	set(OGRE_SAMPLES_INCLUDEPATH
		/usr/local/share/OGRE/samples/Common/include/
	)
endif(UNIX)
 
if (CMAKE_BUILD_TYPE STREQUAL "")
  # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This screws up
  # differentiation between debug and release builds.
  set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel." FORCE)
endif ()
 
set(CMAKE_DEBUG_POSTFIX "_d")
 
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/dist")
 
find_package(OGRE REQUIRED)
 
if(NOT "${OGRE_VERSION_NAME}" STREQUAL "Cthugha")
  message(SEND_ERROR "You need Ogre 1.7 Cthugha to build this.")
endif()
 
find_package(OIS REQUIRED)
 
if(NOT OIS_FOUND)
	message(SEND_ERROR "Failed to find OIS.")
endif()
 
# Find Boost
if (NOT OGRE_BUILD_PLATFORM_IPHONE)
	if (WIN32 OR APPLE)
		set(Boost_USE_STATIC_LIBS TRUE)
	else ()
		# Statically linking boost to a dynamic Ogre build doesn't work on Linux 64bit
		set(Boost_USE_STATIC_LIBS ${OGRE_STATIC})
	endif ()
	if (MINGW)
		# this is probably a bug in CMake: the boost find module tries to look for
		# boost libraries with name libboost_*, but CMake already prefixes library
		# search names with "lib". This is the workaround.
		set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "")
	endif ()
	set(Boost_ADDITIONAL_VERSIONS "1.44" "1.44.0" "1.42" "1.42.0" "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0" "1.39" "1.38.0" "1.38" "1.37.0" "1.37" )
	# Components that need linking (NB does not include header-only components like bind)
	set(OGRE_BOOST_COMPONENTS thread date_time)
	find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
	if (NOT Boost_FOUND)
		# Try again with the other type of libs
		set(Boost_USE_STATIC_LIBS NOT ${Boost_USE_STATIC_LIBS})
		find_package(Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
	endif()
	find_package(Boost QUIET)
 
	# Set up referencing of Boost
	include_directories(${Boost_INCLUDE_DIR})
	add_definitions(-DBOOST_ALL_NO_LIB)
	set(OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
endif()
if (WIN32)
set(HDRS

	#main
	./main.h
	
	#game
	../serverside/game/game.h
	
	#tdreamsock
	../tdreamsock/dreamSockLog.h
	../tdreamsock/dreamWinSock.h
	
	#network
	../network/network.h
	
	#shape
	../serverside/shape/shape.h
	../serverside/shape/ogreShape.h
	
	#move
	../serverside/move/move.h
	../serverside/move/move.h
	
	#move states
	../serverside/move/moveStateMachine.h
	../serverside/move/moveState.h
	../serverside/move/moveStates.h
	
	#rotation
	../serverside/rotation/rotation.h
	
	#rotation states
	../serverside/rotation/rotationStateMachine.h
	../serverside/rotation/rotationState.h
	../serverside/rotation/rotationStates.h	
	
	#jump
	../serverside/jump/jump.h
	
	#jump states
	../serverside/jump/jumpStateMachine.h
	../serverside/jump/jumpState.h
	../serverside/jump/jumpStates.h	
	
	#math
	../math/vector3D.h
	
	#command
	../command/command.h
	
	#message
	../message/message.h
	
	#server
	../server/server.h
	
	#client
	../client/client.h
	
	#billboard
	#../billboard/objectTitle.h

)
 
set(SRCS

	#main
	./main.cpp

	#game
	../serverside/game/game.cpp
	
	#dreamsock
	../tdreamsock/dreamSockLog.cpp
	../tdreamsock/dreamWinSock.cpp
	
	#network
	../network/network.cpp
	
	#shape
	../serverside/shape/shape.cpp
	../serverside/shape/ogreShape.cpp
	
	#move
	../serverside/move/move.cpp
	
	#move states
	../serverside/move/moveStates.cpp
	
	#rotation
	../serverside/rotation/rotation.cpp
	
	#rotation states
	../serverside/rotation/rotationStates.cpp
	
	#jump
	../serverside/jump/jump.cpp
	
	#jump states
	../serverside/jump/jumpStates.cpp
	
	#math
	../math/vector3D.cpp
	
	#command
	../command/command.cpp
	
	#message
	../message/message.cpp
	
	#server
	../server/server.cpp
	
	#client
	../client/client.cpp
	
	#billboard
	#../billboard/objectTitle.cpp
	
)
endif (WIN32)

if (UNIX)
set(HDRS
	
	#main
	./main.h
	
	#game
	../serverside/game/game.h
	
	#network
	../network/network.h
	
	#tdreamsock
	../tdreamsock/dreamSockLog.h
	../tdreamsock/dreamLinuxSock.h
	
	#shape
	../serverside/shape/shape.h
	../serverside/shape/ogreShape.h
	
	#move
	../serverside/move/move.h
	../serverside/move/move.h
	
	#move states
	../serverside/move/moveStateMachine.h
	../serverside/move/moveState.h
	../serverside/move/moveStates.h
	
	#rotation
	../serverside/rotation/rotation.h
	
	#rotation states
	../serverside/rotation/rotationStateMachine.h
	../serverside/rotation/rotationState.h
	../serverside/rotation/rotationStates.h	
	
	#jump
	../serverside/jump/jump.h
	
	#jump states
	../serverside/jump/jumpStateMachine.h
	../serverside/jump/jumpState.h
	../serverside/jump/jumpStates.h	
	
	#math
	../math/vector3D.h
	
	#command
	../command/command.h
	
	#message
	../message/message.h
	
	#server
	../server/server.h
	
	#client
	../client/client.h
	
	#billboard
	#../billboard/objectTitle.h
)
 
set(SRCS

	#main
	./main.cpp
	
	#game
	../serverside/game/game.cpp

	#dreamsock
	../tdreamsock/dreamSockLog.cpp
	../tdreamsock/dreamLinuxSock.cpp

	#network
	../network/network.cpp
	
	#shape
	../serverside/shape/shape.cpp
	../serverside/shape/ogreShape.cpp
	
	#move
	../serverside/move/move.cpp
	
	#move states
	../serverside/move/moveStates.cpp
	
	#rotation
	../serverside/rotation/rotation.cpp
	
	#rotation states
	../serverside/rotation/rotationStates.cpp
	
	#jump
	../serverside/jump/jump.cpp
	
	#jump states
	../serverside/jump/jumpStates.cpp
	
	#math
	../math/vector3D.cpp
	
	#command
	../command/command.cpp
	
	#message
	../message/message.cpp
	
	#server
	../server/server.cpp
	
	#client
	../client/client.cpp
	
	#billboard
	#../billboard/objectTitle.cpp

)
endif (UNIX)
include_directories( ${OIS_INCLUDE_DIRS}
	${OGRE_INCLUDE_DIRS}
	${OGRE_SAMPLES_INCLUDEPATH}
)
 
add_executable(Server WIN32 ${HDRS} ${SRCS})
 
set_target_properties(Server PROPERTIES DEBUG_POSTFIX _d)
 
target_link_libraries(Server ${OGRE_LIBRARIES} ${OIS_LIBRARIES})
 
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist/bin)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist/media)
 
# post-build copy for win32
if(WIN32 AND NOT MINGW)
	add_custom_command( TARGET Server PRE_BUILD
		COMMAND if not exist .\\dist\\bin mkdir .\\dist\\bin )
	add_custom_command( TARGET Server POST_BUILD
		COMMAND copy \"$(TargetPath)\" .\\dist\\bin )
endif(WIN32 AND NOT MINGW)
 
if(MINGW OR UNIX)
	set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/dist/bin)
endif(MINGW OR UNIX)
 
if(WIN32)
 
	install(TARGETS Server
		RUNTIME DESTINATION bin
		CONFIGURATIONS All)
 
	install(FILES ${CMAKE_SOURCE_DIR}/dist/bin/win32/plugins.cfg
		${CMAKE_SOURCE_DIR}/dist/bin/win32/resources.cfg
		DESTINATION bin
		CONFIGURATIONS Release RelWithDebInfo
	)
 
	install(FILES ${CMAKE_SOURCE_DIR}/dist/bin/win32/plugins_d.cfg
		${CMAKE_SOURCE_DIR}/dist/bin/win32/resources_d.cfg
		DESTINATION bin
		CONFIGURATIONS Debug
	)
 
        # NOTE: for the 1.7.1 sdk the OIS dll is called OIS.dll instead of libOIS.dll
        # so you'll have to change that to make it work with 1.7.1
	install(FILES ${OGRE_PLUGIN_DIR_REL}/OgreMain.dll
		${OGRE_PLUGIN_DIR_REL}/RenderSystem_Direct3D9.dll
		${OGRE_PLUGIN_DIR_REL}/RenderSystem_GL.dll
		${OGRE_PLUGIN_DIR_REL}/libOIS.dll
		DESTINATION bin
		CONFIGURATIONS Release RelWithDebInfo
	)
 
	install(FILES ${OGRE_PLUGIN_DIR_DBG}/OgreMain_d.dll
		${OGRE_PLUGIN_DIR_DBG}/RenderSystem_Direct3D9_d.dll
		${OGRE_PLUGIN_DIR_DBG}/RenderSystem_GL_d.dll
		${OGRE_PLUGIN_DIR_DBG}/libOIS_d.dll
		DESTINATION bin
		CONFIGURATIONS Debug
	)
 
   # as of sdk 1.7.2 we need to copy the boost dll's as well
   # because they're not linked statically (it worked with 1.7.1 though)
   install(FILES ${Boost_DATE_TIME_LIBRARY_RELEASE}
      ${Boost_THREAD_LIBRARY_RELEASE}
      DESTINATION bin
      CONFIGURATIONS Release RelWithDebInfo
   )
 
   install(FILES ${Boost_DATE_TIME_LIBRARY_DEBUG}
      ${Boost_THREAD_LIBRARY_DEBUG}
      DESTINATION bin
      CONFIGURATIONS Debug
   )
endif(WIN32)
 
if(UNIX)
 
	install(TARGETS Server
		RUNTIME DESTINATION bin
		CONFIGURATIONS All)
  
	install(FILES ${CMAKE_SOURCE_DIR}/dist/bin/linux/plugins.cfg
		${CMAKE_SOURCE_DIR}/dist/bin/linux/resources.cfg
		DESTINATION bin
		CONFIGURATIONS Release RelWithDebInfo Debug
	)
 
endif(UNIX)

if(WIN32)
# Need to link this for timeGetTime windows function.
target_link_libraries (Server winmm) 
endif(WIN32)
